﻿//-------------------------------------
// WBFSSync - WBFSSync.exe
//
// Copyright 2009 Caian (ÔmΣga Frøst) <frost.omega@hotmail.com> :
//
// WBFSSync is Licensed under the terms of the Microsoft Reciprocal License (Ms-RL)
//
// Language.cs:
//
// Carrega os textos utilizados pelo aplicativo
//
//-------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace WBFSSync
{
    static class Language
    {
        public const string AppName = "WBFSSync";

        public static string LanguageFolder = @"Language\";

        public const string DefaultLanguage = "Pt-Br";
        public static string SelectedLanguage = DefaultLanguage;

        public static bool LanguageReady = false;

        public static string[] AvaliableLanguages = new string[] { "Pt-Br" };

        //-------------------------------------------------------------------------------------------------------------

        public static String foldername_favorites = "Favoritos";
        public static String foldername_desktop = "Área de Trabalho";
        public static String foldername_documents = "Documentos";
        public static String foldername_computer = "Computador";
        public static String foldername_library = "Biblioteca";
        public static String foldername_covers = "Capas";

        public static String tooltip_exportcover = "Capas...";
        public static String tooltip_ripdvd = "Copiar jogo a partir do DVD para a pasta atual";
        public static String tooltip_addlibrary = "Adicionar pasta de jogos à Biblioteca";
        public static String tooltip_removelibrary = "Remover pasta de jogos da Biblioteca";

        public static String tooltip_viewmode = "Altere o modo de exibição";
        public static String tooltip_config = "Configurações";
        public static String tooltip_donate = "Contribua para o projeto WBFSSync";
        public static String tooltip_help = "Ajuda On-Line";
        public static String tooltip_format = "Formatar o dispositivo selecionado como WBFS";
        public static String tooltip_rename = "Alterar o nome e/ou código do jogo selecionado";
        public static String tooltip_organize = "Organizar o conteúdo da pasta";

        public static String tab_operations = "Operações";
        public static String tab_log = "Log";
        public static String tab_clipboard = "Área de Transferência";

        public static String drivename_fixed = "Disco Local";
        public static String drivename_removable = "Disco Removível";
        public static String drivename_network = "Disco de Rede";
        public static String drivename_wbfs = "Disco WBFS";
        public static String drivename_optical = "Unidade de CD";
        public static String drivename_unknown = "Desconhecido";

        public static String opstate_pending = "Pendente";
        public static String opstate_cancel = "Cancelando";

        public static String opname_unknown = "Deconhecida";
        public static String opname_copy = "Copiando";
        public static String opname_move = "Movendo";
        public static String opname_delete = "Apagando";
        public static String opname_discdatachange = "Alterando";
        public static String opname_rardecompress = "Descomprimindo RAR";
        public static String opname_scrubdecompress = "Descomprimindo Scrub";
        public static String opname_scrubcompress = "Comprimindo Scrub";
        public static String opname_format = "Formatando";
        public static String opname_devicecloning = "Clonando Dispositivo";
        public static String opname_coverdownload = "Baixando Capas";
        public static String opname_programupdate = "Atualizando";

        public static string operations_header_operation = "Operação";
        public static string operations_header_source = "Origem";
        public static string operations_header_destination = "Destino";
        public static string operations_header_progress = "Progresso";

        public static string explorer_header_name = "Nome";
        public static string explorer_header_typecode = "Tipo/Código";
        public static string explorer_header_region = "Região";
        public static string explorer_header_size = "Tamanho";

        public static string explorer_folder = "Pasta de arquivos";
        public static string explorer_file = "Arquivo";
        public static string explorer_wiidisc = "Imagem de disco de Wii";
        public static string explorer_scrubbeddisc = "Imagem de disco de Wii comprimida";
        public static string explorer_cisodisc = "CISO";

        public static string explorer_fixeddrives = "Unidades de Disco Rígido";
        public static string explorer_removabledrives = "Dispositivos com Armazenamento Removível";
        public static string explorer_wbfsdrives = "Dispositivos Formatados em WBFS";
        public static string explorer_networkdrives = "Local da rede";

        public static string explorer_emptyfolder = "Esta pasta está vazia.";

        public static string explorer_drive_freespace = "livre(s) de";

        public static string disc_region_unknown = "Região Desconhecida";

        public static string message_invalid_drive = "Dispositivo inválido";
        public static string message_invalid_folder = "Não é possível mover arquivos para esta pasta";
        public static string message_corrupted_cover = "A capa {0} está corrompida e será deletada";
        public static string message_drive_not_ready = "O dispositivo não está pronto";
        public static string message_drive_in_use = "O dispositivo está em uso";
        public static string message_access_denied = "Acesso negado";
        public static string message_removefromlibrary = "Deseja remover a pasta selecionada da Biblioteca?";
        public static string message_canceloperation = "Deseja cancelar a operação selecionada?";
        public static string message_close_operations = "Deseja cancelar todas as operações na fila?";
        public static string message_browsedrive = "Selecione um drive para exportar as capas";

        public static string message_replace_files = "Já há um arquivo com o mesmo nome neste local, você deseja substituí-lo?";
        public static string message_delete_files = "Tem certeza de que deseja excluir permanentemente o(s) arquivo(s) selecionado(s)?";
        public static string message_delete_covers = "Tem certeza de que deseja excluir permanentemente a(s) capa(s) selecionada(s)?";
        public static string message_delete_lib_folders = "Tem certeza de que deseja remover a(s) pasta(s) selecionada(s) da biblioteca?";
        public static string message_failed_delete_files = "Um ou mais arquivos não puderam ser excluídos";
        public static string message_failed_rename_files = "Não foi possível renomear o arquivo";

        public static string message_format_drive = "Formatar uma partição irá causar a perda de todos os dados contidos nela, deseja continuar?";

        public static string message_invalid_chars = "O campo {0} contém caracteres ilegais";
        public static string message_invalid_namecode = "O campo {0} deve possuir a estrurura 'Código - Nome', onde 'Código' deve possuir 6 caracteres e 'Nome' mais que 0 e até {1} caracteres";

        public static string message_apply_config_before_exit = "Aplicar as configurações antes de sair?";
        public static string message_apply_config = "Aplicar as configurações?";

        public static string message_update_new_version = "Uma nova versão está disponível '{0}', gostaria de baixá-la agora?";
        public static string message_update_completed = "As atualizações serão aplicadas na próxima vez que você iniciar o programa";

        public static string field_name = "Nome";
        public static string field_path = "Caminho";
        public static string field_width = "Largura";
        public static string field_height = "Altura";

        public static string field_explorer = "Explorer";
        public static string field_explorer_click = "Reproduzir som ao mudar de diretório";
        public static string field_explorer_extract_scrubbed = "Extrair Jogos para Scrub automaticamente";
        public static string field_explorer_update_scrub = "Atualizar versão dos arquivos Syncscrub automaticamente";

        public static string field_close_format_window = "Fechar janela de formatação de disco";

        public static string field_covers = "Capas";
        public static string field_autodownload_covers = "Baixar capas automaticamente";
        public static string field_3d_covers = "Baixar capas 3D *";
        public static string field_export_to_compatible_path = "Exportar para drive compatível";

        public static string field_update = "Atualização: *";
        public static string field_notify_only = "Notificar apenas";

        public static string field_language = "Idioma: *";
        public static string field_skin = "Skin: *";

        public static string field_log = "Registro:";
        public static string field_save_log = "Salvar registro";
        public static string field_save_exception_log = "Salvar registro de exceções";

        public static string field_no_format = "Excluir drives da formatação:";
        public static string field_ignore = "Drives ignorados pelo programa: *";
        public static string field_loaders = "Loaders";

        public static string field_edit = "Editar";

        public static string field_apply = "Aplicar";
        public static string field_cancel = "Cancelar";
        public static string field_ok = "Ok";

        public static string field_needrestart = "* O programa precisa ser reiniciado para as alterações fazerem efeito";

        public static string field_namecode = "Código - Nome";

        public static string field_form_name_edit_loader = "Editar Loader";
        public static string field_form_name_rename_iso = "Renomear Disco";

        public static string field_dialog_name_add_to_library = "Selecione uma pasta para adicionar à Biblioteca";

        public static string menuitem_synchronizecover = "Sincronizar e Baixar Capas";
        public static string menuitem_exportcoversto = "Exportar Capas para {0}";

        public static string menuitem_organize = "Organizar";

        public static string menuitem_cut = "Recortar";
        public static string menuitem_copy = "Copiar";
        public static string menuitem_paste = "Colar";
        public static string menuitem_delete = "Excluir";
        public static string menuitem_rename = "Renomear";
        public static string menuitem_format = "Formatar";

        public static string menuitem_compress = "Compactar";
        public static string menuitem_decompress = "Descompactar";
        public static string menuitem_config = "Configurações";
        public static string menuitem_about = "Sobre o WBFSSync";
        public static string menuitem_help = "Ajuda";
        public static string menuitem_donate = "Contribua para o projeto WBFSSync";
        public static string menuitem_close = "Fechar";

        public static string menuitem_sendto = "Enviar para";

        public static string menuitem_downloadcover = "Baixar capa";

        public static string menuitem_newfoldertolib = "Adicionar pasta à biblioteca";
        public static string menuitem_clearlib = "Remover todas as pastas da biblioteca";

        public static string menuitem_viewmode_cover = "Capas";
        public static string menuitem_viewmode_tile = "Lado a lado";
        public static string menuitem_viewmode_list = "Lista";
        public static string menuitem_viewmode_details = "Detalhes";

        public static string menuitem_update_off = "Nunca";
        public static string menuitem_update_onexecute = "Sempre";
        public static string menuitem_update_onceaday = "Uma vez por dia";
        public static string menuitem_update_onceaweek = "Uma vez por semana";

        //Log
        public static string log_load_config = "Carregando configurações";

        public static string log_load_lang = "Carregando idioma {0}";
        public static string log_load_lang_fail = "Falha ao carregar idioma, usando padrão 'Pt-Br'";

        public static string log_map_devices = "Mapeando dispositivos";
        public static string log_devices_found = "Encontrados {0} Dispositivos, {1} WBFS";

        public static string log_load_covers = "Carregando lista de capas";
        public static string log_covers_found = "Encontradas {0} capas";

        public static string log_load_libraries = "Carregando biblioteca";
        public static string log_libraries_found = "Encontrados {0} jogos em {1} pastas";

        public static string log_load_skin = "Carregando skin {0}";
        public static string log_load_skin_fail = "Falha ao carregar o skin {0}, carregando o padrão {1}";
        public static string log_load_skin_criticalfail = "Falha crítica, o skin padrão não foi encontrado";
        public static string log_applying_skin = "Aplicando skin";

        public static string log_synccovers = "Sincronizando capas";
        public static string log_new_covers_found = "Encontradas {0} novas capas";

        public static string log_parsecovererror_name = "Não foi possível processar loader, o nome não pode ser vazio";
        public static string log_parsecovererror_dimension = "Não foi possível processar loader '{0}', o parâmetro 'Largura' ou 'Altura' não é um número inteiro positivo";

        public static string log_device_update = "Atualizando dispositivos";
        public static string log_library_update = "Atualizando biblioteca";

        public static string log_done = "Pronto";

        public static string log_cover_not_found = "Não foi possível baixar a capa '{0}', o arquivo não existe";

        public static string log_file_not_found = "O arquivo '{0}' não existe";
        public static string log_directory_not_found = "O diretório '{0}' não existe";
        public static string log_drive_not_ready = "O dispositivo '{0}' não está pronto";
        public static string log_not_enough_space = "Não há espaço suficiente para completar a operação";
        public static string log_incorrect_file_type = "O arquivo está em um formato não suportado ou está corrompido";

        public static string log_update_cant_get_version = "Não foi possível verificar a versão mais nova disponível";
        public static string log_update_cant_download = "Não foi possível concluir o download da nova atualização '{0}'";
        public static string log_update_latest_version = "O programa já está atualizado";
        public static string log_update_success = "A atualização foi concluida";
        public static string log_update_canceled = "A atualização foi cancelada pelo usuário";

        //Códigos de erro para as Dll ligas ao programa
        public static Dictionary<int, String> log_dllcodes = new Dictionary<int, string>();
        public static string log_dllcode_unknown = "O objeto {0} gerou um erro desconhecido {1}";
        public static string log_dllcode_ok = "{0}: Ok"; //Código 0

        //Exceções
        public static string exception_defaultskinnotfound = "Skin Padrão Não Encontrada";
        public static string exception_lastchance = "Ocorreu um erro inesperado durante a execução do programa e este será fechado, se o erro persistir reporte-o no site http://wbfssync.codeplex.com/";

        //
        public static string FormatDllCode(String sender, int code, object extendedinfo)
        {
            if (log_dllcodes.ContainsKey(code))
            {
                return String.Format(log_dllcodes[code], sender, extendedinfo);
            }
            else
            {
                return String.Format(log_dllcode_unknown, sender, code);
            }
        }

        //
        public static void LoadDefaultDllCodes()
        {
            //Códigos de erro para WBFSDevice
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_FAIL, "{0}: Falha");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_ABORTED, "{0}: Operação abortada");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_BADFSMAGIC, "{0}: Código de identificação da partição(Magic) incorreto {1}");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_BADFSSECSZ, "{0}: Tamanho de setor salvo incorreto '{1}'");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_BADFSTSECS, "{0}: Quantidade salva de setores incorreta '{1}'");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_ACCESSDENIED, "{0}: Acesso negado");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_NOFREEBLOCKS, "{0}: Não há blocos livres suficientes para continuar a operação");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_NOTAWIIDISC, "{0}: O disco não é um disco de Wii válido");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_DISCNOTFOUND, "{0}: Disco não encontrado");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_DISCREPEATED, "{0}: Um disco com o mesmo nome ou código já existe {1}");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_CRITICALERROR, "{0}: Erro crítico");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_NATIVEERROR, "{0}: Erro nativo do windows '{1}'");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_INVALIDARG, "{0}: Argumento inválido '{1}'");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_TRIMNAME, "{0}: O nome do disco é muito grande e será cortado para '{1}'");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_TRIMCODE, "{0}: O código do disco é muito grande e será cortado '{1}'");
            log_dllcodes.Add((int)WBFSRet.RET_WBFS_FILLCODE, "{0}: O código do disco é muito pequeno e será preenchido com '{1}'");

            //Códigos de erro para IOManager
            log_dllcodes.Add((int)IORet.RET_IO_FAIL, "{0}: Falha");
            log_dllcodes.Add((int)IORet.RET_IO_ALREADY_WORKING, "{0}: Uma operação assíncrona já está em andamento");
            log_dllcodes.Add((int)IORet.RET_IO_INVALID_HANDLE, "{0}: Handle inválido");
            log_dllcodes.Add((int)IORet.RET_IO_HANDLE_CLOSED, "{0}: Handle fechado");
            log_dllcodes.Add((int)IORet.RET_IO_INVALIDARG, "{0}: Argumento inválido '{1}'");
            log_dllcodes.Add((int)IORet.RET_IO_CONTEXT_CLOSED, "{0}: O context está fechado, não pode ser usado");
            log_dllcodes.Add((int)IORet.RET_IO_LOCKED, "{0}: O Handle está sendo usado por outro contexto");
            log_dllcodes.Add((int)IORet.RET_IO_ALREADY_LOCKED, "{0}: O contexto já trancou o Handle");
            log_dllcodes.Add((int)IORet.RET_IO_UNLOCKED, "{0}: O contexto não trancou o Handle");
            log_dllcodes.Add((int)IORet.RET_IO_NATIVEERROR, "{0}: Erro nativo do windows '{1}'");
            log_dllcodes.Add((int)IORet.RET_IO_ACCESS_DENIED, "{0}: Acesso negado");
            log_dllcodes.Add((int)IORet.RET_IO_ERROR_SEEKING, "{0}: Erro durante a operação de 'Seek' '{1}'");
            log_dllcodes.Add((int)IORet.RET_IO_ERROR_READING, "{0}: Erro durante a operação de leitura '{1}'");
            log_dllcodes.Add((int)IORet.RET_IO_ERROR_WRITING, "{0}: Erro durante a operação de escrita '{1}'");
            log_dllcodes.Add((int)IORet.RET_IO_ERROR_SET_EOF, "{0}: Erro durante a operação de 'Set EOF' '{1}'");
            log_dllcodes.Add((int)IORet.RET_IO_ERROR_CLOSING, "{0}: Erro durante o fechamento do Handle");
            log_dllcodes.Add((int)IORet.RET_IO_ERROR_HANDLE_OPEN, "{0}: Erro, o handle ainda está aberto");

            //Códigos de erro para ScrubDisc
            log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_BADMAGIC, "{0}: Código de identificação incorreto do disco SyncScrub '{1}'");
            log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_INCORRECTVERSION, "{0}: Versão não suportada pelo aplicativo '{1}'");
            log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_INCONSISTENTDATA, "{0}: Dados inconsistentes encontrados no disco");

            log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_INVALIDARG, "{0}: Argumento inválido '{1}'");
            log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_FAIL, "{0}: Falha");
            log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_ABORTED, "{0}: Operação abortada");
        }

        //
        public static int EnumerateLanguages()
        {
            int i = 0;
            try
            {
                String[] temp = Directory.GetFiles(LanguageFolder, "*.inf");
                for (i = 0; i < temp.Length; i++) { temp[i] = Path.GetFileName(temp[i]); }

                AvaliableLanguages = new string[temp.Length + 1];
                AvaliableLanguages[0] = "Pt-Br";
                temp.CopyTo(AvaliableLanguages, 1);

                i = AvaliableLanguages.Length;
            }
            catch (Exception e)
            {
                Log.LogException(e);
                AvaliableLanguages = new string[] { "Pt-Br" };
            }

            return i;
        }

        //
        public static bool Load(String language)
        {
            if (language == DefaultLanguage)
            {
                LoadDefaultDllCodes();
                LanguageReady = true;
                return true;
            }
            else
            {
                ConfigurationReader languageReader = new ConfigurationReader();
                languageReader.OpenConfigurationFile(LanguageFolder + language);

                //----------------------------------------
                String s;

                if (languageReader.GetStringArg("1", 0, out s)) foldername_favorites = s;
                if (languageReader.GetStringArg("2", 0, out s)) foldername_desktop = s;
                if (languageReader.GetStringArg("3", 0, out s)) foldername_documents = s;
                if (languageReader.GetStringArg("4", 0, out s)) foldername_computer = s;
                if (languageReader.GetStringArg("5", 0, out s)) foldername_library = s;
                if (languageReader.GetStringArg("6", 0, out s)) foldername_covers = s;

                if (languageReader.GetStringArg("7", 0, out s)) tooltip_exportcover = s;
                if (languageReader.GetStringArg("8", 0, out s)) tooltip_ripdvd = s;
                if (languageReader.GetStringArg("9", 0, out s)) tooltip_addlibrary = s;
                if (languageReader.GetStringArg("10", 0, out s)) tooltip_removelibrary = s;

                if (languageReader.GetStringArg("11", 0, out s)) tooltip_viewmode = s;
                if (languageReader.GetStringArg("12", 0, out s)) tooltip_config = s;
                if (languageReader.GetStringArg("13", 0, out s)) tooltip_donate = s;
                if (languageReader.GetStringArg("14", 0, out s)) tooltip_help = s;
                if (languageReader.GetStringArg("15", 0, out s)) tooltip_format = s;
                if (languageReader.GetStringArg("16", 0, out s)) tooltip_rename = s;
                if (languageReader.GetStringArg("17", 0, out s)) tooltip_organize = s;

                if (languageReader.GetStringArg("18", 0, out s)) tab_operations = s;
                if (languageReader.GetStringArg("19", 0, out s)) tab_log = s;
                if (languageReader.GetStringArg("20", 0, out s)) tab_clipboard = s;

                if (languageReader.GetStringArg("21", 0, out s)) drivename_fixed = s;
                if (languageReader.GetStringArg("22", 0, out s)) drivename_removable = s;
                if (languageReader.GetStringArg("23", 0, out s)) drivename_wbfs = s;
                if (languageReader.GetStringArg("24", 0, out s)) drivename_optical = s;
                if (languageReader.GetStringArg("25", 0, out s)) drivename_unknown = s;

                if (languageReader.GetStringArg("26", 0, out s)) opstate_pending = s;
                if (languageReader.GetStringArg("27", 0, out s)) opstate_cancel = s;

                if (languageReader.GetStringArg("28", 0, out s)) opname_unknown = s;
                if (languageReader.GetStringArg("29", 0, out s)) opname_copy = s;
                if (languageReader.GetStringArg("30", 0, out s)) opname_move = s;
                if (languageReader.GetStringArg("31", 0, out s)) opname_delete = s;
                if (languageReader.GetStringArg("32", 0, out s)) opname_discdatachange = s;
                if (languageReader.GetStringArg("33", 0, out s)) opname_rardecompress = s;
                if (languageReader.GetStringArg("34", 0, out s)) opname_scrubdecompress = s;
                if (languageReader.GetStringArg("35", 0, out s)) opname_scrubcompress = s;
                if (languageReader.GetStringArg("36", 0, out s)) opname_format = s;
                if (languageReader.GetStringArg("37", 0, out s)) opname_devicecloning = s;
                if (languageReader.GetStringArg("38", 0, out s)) opname_coverdownload = s;
                if (languageReader.GetStringArg("39", 0, out s)) opname_programupdate = s;

                if (languageReader.GetStringArg("40", 0, out s)) operations_header_operation = s;
                if (languageReader.GetStringArg("41", 0, out s)) operations_header_source = s;
                if (languageReader.GetStringArg("42", 0, out s)) operations_header_destination = s;
                if (languageReader.GetStringArg("43", 0, out s)) operations_header_progress = s;

                if (languageReader.GetStringArg("44", 0, out s)) explorer_header_name = s;
                if (languageReader.GetStringArg("45", 0, out s)) explorer_header_typecode = s;
                if (languageReader.GetStringArg("46", 0, out s)) explorer_header_region = s;
                if (languageReader.GetStringArg("47", 0, out s)) explorer_header_size = s;

                if (languageReader.GetStringArg("48", 0, out s)) explorer_folder = s;
                if (languageReader.GetStringArg("49", 0, out s)) explorer_file = s;
                if (languageReader.GetStringArg("50", 0, out s)) explorer_wiidisc = s;
                if (languageReader.GetStringArg("51", 0, out s)) explorer_scrubbeddisc = s;

                if (languageReader.GetStringArg("52", 0, out s)) explorer_fixeddrives = s;
                if (languageReader.GetStringArg("53", 0, out s)) explorer_removabledrives = s;
                if (languageReader.GetStringArg("54", 0, out s)) explorer_wbfsdrives = s;

                if (languageReader.GetStringArg("55", 0, out s)) explorer_emptyfolder = s;

                if (languageReader.GetStringArg("56", 0, out s)) disc_region_unknown = s;

                if (languageReader.GetStringArg("57", 0, out s)) message_invalid_drive = s;
                if (languageReader.GetStringArg("58", 0, out s)) message_invalid_folder = s;
                if (languageReader.GetStringArg("59", 0, out s)) message_drive_not_ready = s;
                if (languageReader.GetStringArg("60", 0, out s)) message_drive_in_use = s;
                if (languageReader.GetStringArg("61", 0, out s)) message_access_denied = s;
                if (languageReader.GetStringArg("62", 0, out s)) message_removefromlibrary = s;
                if (languageReader.GetStringArg("63", 0, out s)) message_canceloperation = s;
                if (languageReader.GetStringArg("64", 0, out s)) message_close_operations = s;
                if (languageReader.GetStringArg("65", 0, out s)) message_browsedrive = s;

                if (languageReader.GetStringArg("66", 0, out s)) message_replace_files = s;
                if (languageReader.GetStringArg("67", 0, out s)) message_delete_files = s;
                if (languageReader.GetStringArg("68", 0, out s)) message_delete_covers = s;
                if (languageReader.GetStringArg("69", 0, out s)) message_delete_lib_folders = s;
                if (languageReader.GetStringArg("70", 0, out s)) message_failed_delete_files = s;
                if (languageReader.GetStringArg("71", 0, out s)) message_failed_rename_files = s;

                if (languageReader.GetStringArg("72", 0, out s)) message_format_drive = s;

                if (languageReader.GetStringArg("73", 0, out s)) message_invalid_chars = s;
                if (languageReader.GetStringArg("74", 0, out s)) message_invalid_namecode = s;

                if (languageReader.GetStringArg("75", 0, out s)) message_apply_config_before_exit = s;

                if (languageReader.GetStringArg("76", 0, out s)) message_update_new_version = s;

                if (languageReader.GetStringArg("77", 0, out s)) field_name = s;
                if (languageReader.GetStringArg("78", 0, out s)) field_path = s;
                if (languageReader.GetStringArg("79", 0, out s)) field_width = s;
                if (languageReader.GetStringArg("80", 0, out s)) field_height = s;

                if (languageReader.GetStringArg("81", 0, out s)) field_explorer = s;
                if (languageReader.GetStringArg("82", 0, out s)) field_explorer_click = s;

                if (languageReader.GetStringArg("83", 0, out s)) field_close_format_window = s;

                if (languageReader.GetStringArg("84", 0, out s)) field_covers = s;
                if (languageReader.GetStringArg("85", 0, out s)) field_autodownload_covers = s;
                if (languageReader.GetStringArg("86", 0, out s)) field_3d_covers = s;
                if (languageReader.GetStringArg("87", 0, out s)) field_export_to_compatible_path = s;

                if (languageReader.GetStringArg("88", 0, out s)) field_update = s;
                if (languageReader.GetStringArg("89", 0, out s)) field_notify_only = s;

                if (languageReader.GetStringArg("90", 0, out s)) field_language = s;
                if (languageReader.GetStringArg("91", 0, out s)) field_skin = s;

                if (languageReader.GetStringArg("92", 0, out s)) field_log = s;
                if (languageReader.GetStringArg("93", 0, out s)) field_save_log = s;
                if (languageReader.GetStringArg("94", 0, out s)) field_save_exception_log = s;

                if (languageReader.GetStringArg("95", 0, out s)) field_no_format = s;
                if (languageReader.GetStringArg("96", 0, out s)) field_loaders = s;

                if (languageReader.GetStringArg("97", 0, out s)) field_edit = s;

                if (languageReader.GetStringArg("98", 0, out s)) field_apply = s;
                if (languageReader.GetStringArg("99", 0, out s)) field_cancel = s;
                if (languageReader.GetStringArg("100", 0, out s)) field_ok = s;

                if (languageReader.GetStringArg("101", 0, out s)) field_needrestart = s;

                if (languageReader.GetStringArg("102", 0, out s)) field_namecode = s;

                if (languageReader.GetStringArg("103", 0, out s)) field_form_name_edit_loader = s;
                if (languageReader.GetStringArg("104", 0, out s)) field_form_name_rename_iso = s;

                if (languageReader.GetStringArg("105", 0, out s)) field_dialog_name_add_to_library = s;

                if (languageReader.GetStringArg("106", 0, out s)) menuitem_synchronizecover = s;
                if (languageReader.GetStringArg("107", 0, out s)) menuitem_exportcoversto = s;

                if (languageReader.GetStringArg("108", 0, out s)) menuitem_organize = s;

                if (languageReader.GetStringArg("109", 0, out s)) menuitem_cut = s;
                if (languageReader.GetStringArg("110", 0, out s)) menuitem_copy = s;
                if (languageReader.GetStringArg("111", 0, out s)) menuitem_paste = s;
                if (languageReader.GetStringArg("112", 0, out s)) menuitem_delete = s;
                if (languageReader.GetStringArg("113", 0, out s)) menuitem_rename = s;
                if (languageReader.GetStringArg("114", 0, out s)) menuitem_format = s;

                if (languageReader.GetStringArg("115", 0, out s)) menuitem_compress = s;
                if (languageReader.GetStringArg("116", 0, out s)) menuitem_decompress = s;
                if (languageReader.GetStringArg("117", 0, out s)) menuitem_config = s;
                if (languageReader.GetStringArg("118", 0, out s)) menuitem_about = s;
                if (languageReader.GetStringArg("119", 0, out s)) menuitem_help = s;
                if (languageReader.GetStringArg("120", 0, out s)) menuitem_donate = s;
                if (languageReader.GetStringArg("121", 0, out s)) menuitem_close = s;

                if (languageReader.GetStringArg("122", 0, out s)) menuitem_sendto = s;

                if (languageReader.GetStringArg("123", 0, out s)) menuitem_newfoldertolib = s;
                if (languageReader.GetStringArg("124", 0, out s)) menuitem_clearlib = s;

                if (languageReader.GetStringArg("125", 0, out s)) menuitem_viewmode_cover = s;
                if (languageReader.GetStringArg("126", 0, out s)) menuitem_viewmode_tile = s;
                if (languageReader.GetStringArg("127", 0, out s)) menuitem_viewmode_list = s;
                if (languageReader.GetStringArg("128", 0, out s)) menuitem_viewmode_details = s;

                if (languageReader.GetStringArg("129", 0, out s)) menuitem_update_off = s;
                if (languageReader.GetStringArg("130", 0, out s)) menuitem_update_onexecute = s;
                if (languageReader.GetStringArg("131", 0, out s)) menuitem_update_onceaday = s;
                if (languageReader.GetStringArg("132", 0, out s)) menuitem_update_onceaweek = s;

                //Log
                if (languageReader.GetStringArg("133", 0, out s)) log_load_config = s;

                if (languageReader.GetStringArg("134", 0, out s)) log_load_lang = s;
                if (languageReader.GetStringArg("135", 0, out s)) log_load_lang_fail = s;

                if (languageReader.GetStringArg("136", 0, out s)) log_map_devices = s;
                if (languageReader.GetStringArg("137", 0, out s)) log_devices_found = s;

                if (languageReader.GetStringArg("138", 0, out s)) log_load_covers = s;
                if (languageReader.GetStringArg("139", 0, out s)) log_covers_found = s;

                if (languageReader.GetStringArg("140", 0, out s)) log_load_libraries = s;
                if (languageReader.GetStringArg("141", 0, out s)) log_libraries_found = s;

                if (languageReader.GetStringArg("142", 0, out s)) log_load_skin = s;
                if (languageReader.GetStringArg("143", 0, out s)) log_load_skin_fail = s;
                if (languageReader.GetStringArg("144", 0, out s)) log_load_skin_criticalfail = s;
                if (languageReader.GetStringArg("145", 0, out s)) log_applying_skin = s;

                if (languageReader.GetStringArg("146", 0, out s)) log_synccovers = s;
                if (languageReader.GetStringArg("147", 0, out s)) log_new_covers_found = s;

                if (languageReader.GetStringArg("148", 0, out s)) log_parsecovererror_name = s;
                if (languageReader.GetStringArg("149", 0, out s)) log_parsecovererror_dimension = s;

                if (languageReader.GetStringArg("150", 0, out s)) log_device_update = s;
                if (languageReader.GetStringArg("151", 0, out s)) log_library_update = s;

                if (languageReader.GetStringArg("152", 0, out s)) log_done = s;

                if (languageReader.GetStringArg("153", 0, out s)) log_cover_not_found = s;

                if (languageReader.GetStringArg("154", 0, out s)) log_file_not_found = s;
                if (languageReader.GetStringArg("155", 0, out s)) log_directory_not_found = s;
                if (languageReader.GetStringArg("156", 0, out s)) log_drive_not_ready = s;
                if (languageReader.GetStringArg("157", 0, out s)) log_not_enough_space = s;
                if (languageReader.GetStringArg("158", 0, out s)) log_incorrect_file_type = s;

                if (languageReader.GetStringArg("159", 0, out s)) log_update_cant_get_version = s;
                if (languageReader.GetStringArg("160", 0, out s)) log_update_cant_download = s;
                if (languageReader.GetStringArg("161", 0, out s)) log_update_latest_version = s;
                if (languageReader.GetStringArg("162", 0, out s)) log_update_success = s;
                if (languageReader.GetStringArg("163", 0, out s)) log_update_canceled = s;

                //Códigos de erro para as Dll ligas ao programa
                if (languageReader.GetStringArg("164", 0, out s)) log_dllcode_unknown = s;
                if (languageReader.GetStringArg("165", 0, out s)) log_dllcode_ok = s;

                //Exceções
                if (languageReader.GetStringArg("166", 0, out s)) exception_defaultskinnotfound = s;
                if (languageReader.GetStringArg("167", 0, out s)) exception_lastchance = s;

                //Não puderam ficar na ordem para não dar confusão
                if (languageReader.GetStringArg("168", 0, out s)) field_explorer_extract_scrubbed = s;
                if (languageReader.GetStringArg("169", 0, out s)) message_update_completed = s;
                if (languageReader.GetStringArg("170", 0, out s)) field_ignore = s;
                if (languageReader.GetStringArg("171", 0, out s)) message_corrupted_cover = s;
                if (languageReader.GetStringArg("172", 0, out s)) message_apply_config = s;
                if (languageReader.GetStringArg("173", 0, out s)) field_explorer_update_scrub = s;
                if (languageReader.GetStringArg("174", 0, out s)) explorer_networkdrives = s;
                if (languageReader.GetStringArg("175", 0, out s)) drivename_network = s;
                if (languageReader.GetStringArg("176", 0, out s)) menuitem_downloadcover = s;
                if (languageReader.GetStringArg("177", 0, out s)) explorer_drive_freespace = s;

                //Códigos de erro

                //Códigos de erro para WBFSDevice
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_FAIL).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_FAIL, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_ABORTED).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_ABORTED, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_BADFSMAGIC).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_BADFSMAGIC, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_BADFSSECSZ).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_BADFSSECSZ, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_BADFSTSECS).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_BADFSTSECS, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_ACCESSDENIED).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_ACCESSDENIED, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_NOFREEBLOCKS).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_NOFREEBLOCKS, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_NOTAWIIDISC).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_NOTAWIIDISC, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_DISCNOTFOUND).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_DISCNOTFOUND, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_DISCREPEATED).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_DISCREPEATED, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_CRITICALERROR).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_CRITICALERROR, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_NATIVEERROR).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_NATIVEERROR, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_INVALIDARG).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_INVALIDARG, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_TRIMNAME).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_TRIMNAME, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_TRIMCODE).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_TRIMCODE, s);
                if (languageReader.GetStringArg(((int)WBFSRet.RET_WBFS_FILLCODE).ToString(), 0, out s)) log_dllcodes.Add((int)WBFSRet.RET_WBFS_FILLCODE, s);

                //Códigos de erro para IOManager
                if (languageReader.GetStringArg(((int)IORet.RET_IO_FAIL).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_FAIL, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_ALREADY_WORKING).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_ALREADY_WORKING, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_INVALID_HANDLE).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_INVALID_HANDLE, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_HANDLE_CLOSED).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_HANDLE_CLOSED, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_INVALIDARG).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_INVALIDARG, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_CONTEXT_CLOSED).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_CONTEXT_CLOSED, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_LOCKED).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_LOCKED, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_ALREADY_LOCKED).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_ALREADY_LOCKED, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_UNLOCKED).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_UNLOCKED, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_NATIVEERROR).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_NATIVEERROR, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_ACCESS_DENIED).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_ACCESS_DENIED, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_ERROR_SEEKING).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_ERROR_SEEKING, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_ERROR_READING).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_ERROR_READING, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_ERROR_WRITING).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_ERROR_WRITING, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_ERROR_SET_EOF).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_ERROR_SET_EOF, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_ERROR_CLOSING).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_ERROR_CLOSING, s);
                if (languageReader.GetStringArg(((int)IORet.RET_IO_ERROR_HANDLE_OPEN).ToString(), 0, out s)) log_dllcodes.Add((int)IORet.RET_IO_ERROR_HANDLE_OPEN, s);

                //Códigos de erro para ScrubDisc
                if (languageReader.GetStringArg(((int)ScrubberRet.RET_SCRUB_BADMAGIC).ToString(), 0, out s)) log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_BADMAGIC, s);
                if (languageReader.GetStringArg(((int)ScrubberRet.RET_SCRUB_INCORRECTVERSION).ToString(), 0, out s)) log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_INCORRECTVERSION, s);
                if (languageReader.GetStringArg(((int)ScrubberRet.RET_SCRUB_INCONSISTENTDATA).ToString(), 0, out s)) log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_INCONSISTENTDATA, s);

                if (languageReader.GetStringArg(((int)ScrubberRet.RET_SCRUB_INVALIDARG).ToString(), 0, out s)) log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_INVALIDARG, s);
                if (languageReader.GetStringArg(((int)ScrubberRet.RET_SCRUB_FAIL).ToString(), 0, out s)) log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_FAIL, s);
                if (languageReader.GetStringArg(((int)ScrubberRet.RET_SCRUB_ABORTED).ToString(), 0, out s)) log_dllcodes.Add((int)ScrubberRet.RET_SCRUB_ABORTED, s);

                //----------------------------------------

                LanguageReady = true;

                return true;
            }
        }
    }
}
